# -*- coding:utf-8 -*-

# @Time    : 2023/6/27 17:05
# @Author  : zengwenjia
# @Email   : zengwenjia@lingxi.ai
# @File    : determine_solution.py
# @Software: LLM_internal

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
from bot.financial_sales.agent.base_agent import LLMAgent
from common.log import logger as logging

class DetermineSolution(LLMAgent):
    """根据知识库检索知识 生成解决方案Agent"""
    solution_template_v1 = """
作为一个专业的、非常懂营销的信贷领域的京东金融销售员，你正通过电话和用户沟通，你需要根据用户的问题和对话记录，推理出接下里和用户沟通最合适的策略，并用一句短语总结下。
注意以下事项：
 1.回复的内容需要基于背景知识和对话记录，一步一步推理出是接下来用于下一轮和用户沟通的策略即可，不要一次性给出多个策略或多个步骤，也不要无中生有；
2.回复的内容将用于生成具体回复用户的话术，只用给出最终方案的结论，不要包含分析的过程及方案的原因等信息，请直接给出方案的结论
3.这是电话沟通渠道，需要保障回复内容的简洁有效，回复的内容只用于下一轮和用户沟通的话术生成，因此涉及多个步骤时，不要列出所有步骤，只需要给出下一步沟通方案的一个步骤内容即可；

用户问题：
===
{user_question}
===

用户情景：
===
{user_situation}
===

背景知识：{multi_knowledge}
对话记录如下：
===
{conversation_history}
===
对话记录结束

基于用户问题，根据对话记录和背景知识，请一步步思考，用一句简单的短语总结下接下来销售员和用户沟通的策略是：
"""

    def __init__(self, conversation_history, multi_knowledge, user_question, user_situation):
        self.prompt = self.solution_template_v1
        self.conversation_str = '\n###' + conversation_history #.join([list(d.keys())[0] + ':' + list(d.values())[0] for d in conversation_history])

        self.multi_knowledge = multi_knowledge   # 从知识库检索的多条知识
        self.user_question = user_question   # 用户问题
        self.user_situation = user_situation   # 用户情景

        self.prompt = self.prompt.format(salesperson_role='销售员', conversation_history=self.conversation_str,
                                         multi_knowledge=self.multi_knowledge, user_question=self.user_question,
                                         user_situation=self.user_situation)
        super().__init__(self.prompt)



###########################################################################################################################################################

async def get_solution(deal_conversation_history, multi_knowledge, user_question, user_situation):
    res_design_solution = ""
    if not user_question and not user_situation:
        return res_design_solution
    multi_knowledge = {i + 1: s.get('答案', '') for i, s in enumerate(multi_knowledge)}
    design_solution = DetermineSolution(deal_conversation_history, multi_knowledge, user_question, user_situation)
    res_design_solution = await design_solution.achat_auto_llm(type='gpt')
    # logging.info(f"2.1 Design_Solution_Result: {res_design_solution}")
    return res_design_solution
